#include "func.h"

//le do arquivo de configuracao
//primeira linha : numero de campos
//segunda para frente : tamanho de cada campo
int * le_conf(char *nome, int *ncampos)
{
	int *ctam;
	char str[200];
	FILE *f = fopen(nome, "r");
	if(f == NULL)
	{
		printf("File error.\n");
		exit(1);
	}
	//primeira linha, quantidade de campos no arquivo
	fgets(str, 200, f);
	*ncampos = atoi(str);
	//linhas seguintes
	if(ncampos == 0)
		exit(0);
	else
	{
		int i;
		ctam = (int *)malloc(sizeof(int)*(*ncampos));
		for(i=0; i < (*ncampos); i++)
		{
			fgets(str, 200, f);
			ctam[i] = atoi(str);
		}
	}
	return ctam;
}





//Gera arquivo compacto para 8 campos
//Para mais campos, adicionar linhas de código padrao
void GERA_ARQ_COMPACTO(FILE *f, char *input)
{
	char *aux;
	char *str = (char*)malloc(sizeof(char)*100);
	int i=1;
	 FILE *fout = fopen(input, "w");
	 fgets(str, 100, f);
	while(!feof(f))
	{
		//RA
		aux = strtok(str, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//NOME
		aux = strtok(NULL, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//CIDADE
		aux = strtok(NULL, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//TEL
		aux = strtok(NULL, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//TEL ALT
		aux = strtok(NULL, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//SEXO
		aux = strtok(NULL, "|");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		i++;
		//CURSO
		aux = strtok(NULL, "|#");
		fprintf(fout, "<%d><%d>%s", strlen(aux), i, aux);
		//FECHAMENTO
		fprintf(fout,"#\n");
		fgets(str, 100, f);
		fflush(fout);
		i=1;
	}
	fclose(fout);
}


int GERA_ARQ_COM_SEPARADOR(cad strut)
{
  FILE *new_file;
  new_file = fopen("LB02GRUPO14_1_SoSep.txt", "a+");
  if (new_file==NULL)
  {
    printf(ferro);
    fclose (new_file);
    return 0;
  }

  else{
//ra
    fputs (strut->sra, new_file);
    fputs (bar, new_file);

//nome
    fputs (strut->snome, new_file);
    fputs (bar, new_file);
    if(strlen(strut->scidade)!=0)
    {
//cidade      
      fputs (strut->scidade, new_file);
      fputs (bar, new_file);
      }
    else
      fputs (bar, new_file);
    if(strlen(strut->stel)!=0)
    {
//tel
      fputs (strut->stel, new_file);
      fputs (bar, new_file);
    }
    else
      fputs (bar, new_file);    
    
    if(strlen(strut->stel_alt)!=0)
    {
//tel_alt
      fputs (strut->stel_alt, new_file);
      fputs (bar, new_file);
    }
    else
      fputs (bar, new_file);    
//sexo
    fputs (strut->ssexo, new_file);
    fputs (bar, new_file);
//curso
    fputs (strut->scurso, new_file);
    fputs (bar, new_file);    
//#
    fputs (fim, new_file);         
    fputs (lf, new_file);         
  }
  fclose (new_file);
  return 1;
}

int abre_arquivo()
{
  FILE *ap_file, *new_file;
  int i=0,t=0,func;
  cad pessoa = (cad)malloc(sizeof(cadastro));
  
  ap_file = fopen("LB02GRUPO14_1.txt", "r+");
  
  if (ap_file==NULL)
  {
    printf(ferro);
    fclose (ap_file);
    return 0;
  }
  
  fseek(ap_file, 0, SEEK_END);
  t = ftell(ap_file);
  
  printf ("tamanho do arquivo %d\n", t);
  fseek(ap_file,0 , SEEK_SET);
  
  //numero de registros
  t = t / 69;

  while(i<t)
  {
//ra
    fgets (pessoa->sra, ra, ap_file); 
    fseek(ap_file,1, SEEK_CUR);
//nome
    fgets (pessoa->snome, nome, ap_file); 
//cidade
    fgets (pessoa->scidade, cidade, ap_file); 
//tel
    fgets (pessoa->stel, tel, ap_file); 
    fseek(ap_file,1, SEEK_CUR);
//tel_alt
    fgets (pessoa->stel_alt, tel_alt, ap_file); 
    fseek(ap_file,1, SEEK_CUR);
//sexo
    fgets (pessoa->ssexo, sexo, ap_file); 
    fseek(ap_file,1, SEEK_CUR);
//curso
    fgets (pessoa->scurso, curso, ap_file); 

    pessoa->sra[6]='\0';
    pessoa->snome[24]='\0';
    pessoa->scidade[15]='\0';
    pessoa->stel[8]='\0';
    pessoa->stel_alt[8]='\0';
    pessoa->ssexo[1]='\0';

//funcao de arrumar a struct AQUI
//insere no arquivo de saida
    func=GERA_ARQ_COM_SEPARADOR(pessoa);

    if(func==0)
      printf(ferro);

    fseek(ap_file,3, SEEK_CUR);
    i++;
  }
  
  fclose(ap_file);
  
  return 1;
}




